// Session
// 通过 Cookie，我们可以给每一个用户设置一个 Session，用来存储用户身份相关的信息，
// 这份信息会加密后存储在 Cookie 中，实现跨请求的用户身份保持。
//
// 框架内置了 Session 插件，给我们提供了 ctx.session 来访问或者修改当前用户 Session 。
//
// Session 的使用方法非常直观，直接读取它或者修改它就可以了，如果要删除它，直接将它赋值为 null：
//
// ctx.session = null;
// 和 Cookie 一样，Session 也有许多安全等选项和功能，在使用之前也最好阅读 Session 文档深入了解。
import { Inject, Controller, Get, Provide } from '@midwayjs/decorator';
import { Context } from '@midwayjs/koa';

@Controller('/api/controller/param/session')
export class HomeController {
  @Inject()
  ctx: Context;

  @Get('/getSession')
  async getSession() {
    // 获取 Session 上的内容
    const userId = this.ctx.session.userId;
    console.info('userId', userId);
    const posts = await this.ctx.service.post.fetch(userId);
    console.info('posts', posts);
    // 修改 Session 的值
    this.ctx.session.visited = this.ctx.session.visited
      ? this.ctx.session.visited + 1
      : 1;
    const provideStr = Provide.toString();
    console.log('provideStr:', provideStr);
    // ...
    return {
      userId,
      posts,
      visited: this.ctx.session.visited,
    };
  }
}
